#pragma once

#include <iostream>
#include <string>

#include <time.h>

namespace ns_log
{
    //日志等级
    enum{
        INFO,
        DEBUG,
        WARNING,
        ERROR,
        FATAL
    };

    //形参中#level:可以直接把传入的level变成一个字符串
    #define LOG(level) Log(#level,__FILE__,__LINE__)

    std::ostream &Log(const std::string &level,const std::string &file_name,int line)
    {
        //添加日志等级
        std::string message = "[";
        message += level;
        message += "]";

        // 添加报错文件名称和报错行
        message += "[";
        message += file_name;
        message += ":";
        message += std::to_string(line);
        message += "]";

        //添加日志时间
        time_t t = time(nullptr);
        struct tm* ptm = localtime(&t);
        char time_str[32];
        strftime(time_str, 31, "%H:%M:%S", ptm);
        message += "[";
        message+=time_str;
        message += "]";

        //把拼接的字符串存入cout的缓冲区中
        std::cout << message;

        //返回给用户，让用户开放式的打印自己的日志
        return std::cout;
    }
}